Se supone que una clase tiene un campo prototype que proporciona campos predeterminados. Por ejemplo, prototype.constructor por defecto es la función constructora (es decir, la clase misma) y, por lo tanto, es accesible como el campo constructor en nuevos objetos :
function MyClass(){} console.log(MyClass.prototype.constructor === MyClass); // true console.log(new MyClass().constructor === MyClass); // true Eso está bien y bueno. Sin embargo, si accidentalmente confundimos la clase y el objeto, esperaríamos un error, ya que la clase no debería tener un campo constructor . Pero lo hace:
console.log("constructor" in MyClass); // true console.log(MyClass.constructor === MyClass); // false ¿Por qué la clase en sí tiene un campo constructor y por qué no es lo mismo que protoype.constructor ? ¿No conduciría esto a muchos errores, ya que un programa podría acceder inadvertidamente al campo constructor de una clase ?